package band.wukong.practice.webservice.kh.sample11;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.xml.ws.Endpoint;
import javax.xml.ws.handler.Handler;
import java.util.ArrayList;
import java.util.List;

/**
 * 代码优先的例子
 * 1. 就不用wsimport了。但很类似.
 *    cd D:\Work\bin-java\apache-cxf-3.1.11\bin
 *    wsdl2java -d d:\ -encoding utf-8 -keep -verbose http://localhost:9000/wkp/webservice/kh/sample11?wsdl
 *    （wsimport -d d:\ -encoding utf-8 -keep -verbose http://localhost:9000/wkp/webservice/kh/sample11?wsdl）
 * 2. 增加LoggingInterceptor来log出SOAP消息日志
 * 3. 增加头信息。  ！！！！！！！！！！！！注意： 这种写法不好，仅作说明使用！！！！！！！！！！！！
 *
 *
 * 注意：JAX-WS和CXF生成的WSDL风格略有区别。
 * 1. 前者xsd是独立的，后者直接包含在wsdl里边。
 * 2. 对于port，service等等的命名规则也不同。
 *
 *
 * @author wukong(wukonggg@139.com)
 */
public class RobotServer {

    private static final Logger logger = LoggerFactory.getLogger(RobotServer.class);

    public static void main(String[] args) {
//        jaxws();
        cxf();
        logger.info("Server started.");
        logger.info("WSDL = " + RobotConst.SERVICE_WSDL);
    }

    private static void jaxws() {
        Endpoint.publish(RobotConst.SERVICE_URL, new RobotServiceImpl());
    }

    private static void cxf() {
        JaxWsServerFactoryBean  factory = new JaxWsServerFactoryBean();
        factory.setAddress(RobotConst.SERVICE_URL);
        factory.setServiceClass(RobotService.class);
        factory.setServiceBean(new RobotServiceImpl());

        factory.getInInterceptors().add(new LoggingInInterceptor());
        factory.getOutInterceptors().add(new LoggingOutInterceptor());

        List<Handler> handlers = new ArrayList<>();
        handlers.add(new LicenseHandler());
        factory.setHandlers(handlers);

        factory.create();
    }
}
